home *** CD-ROM | disk | FTP | other *** search
/ Delphi Magazine Collection 2001 / Delphi Magazine Collection 20001 (2001).iso / DISKS / Issue48 / Construc / UNIT1.PAS < prev   
Encoding:
Pascal/Delphi Source File  |  1999-06-25  |  3.3 KB  |  129 lines

  1. unit Unit1;
  2. interface
  3. uses
  4.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  5.   StdCtrls;
  6.  
  7. const
  8.   _Caption = 'The Delphi Magazine #48 - Dynamic Game of Memory: %d';
  9.  
  10. type
  11.   TArrayArrayButton = Array of Array of TButton;
  12.  
  13.   TForm1 = class(TForm)
  14.     procedure FormCreate(Sender: TObject);
  15.   private
  16.     { Private declarations }
  17.     Turns: Integer;
  18.     procedure Shuffle(Button: TArrayArrayButton);
  19.     procedure FirstButtonClick(Sender: TObject);
  20.     procedure SecondButtonClick(Sender: TObject);
  21.   public
  22.     { Public declarations }
  23.     procedure CreateBoard(X,Y: Integer);
  24.   end;
  25.  
  26. var
  27.   Form1: TForm1;
  28.  
  29. implementation
  30. {$R *.DFM}
  31.  
  32. procedure TForm1.FormCreate(Sender: TObject);
  33. begin
  34.   Randomize;
  35.   Turns := 0;
  36.   CreateBoard(6,4)
  37. end;
  38.  
  39. procedure TForm1.CreateBoard(X, Y: Integer);
  40. var
  41.   i,j: Integer;
  42.   Button: TArrayArrayButton;
  43. begin
  44.   SetLength(Button, X);
  45.   for i:=0 to Pred(X) do
  46.   begin
  47.     SetLength(Button[i], Y);
  48.     for j:=0 to Pred(Y) do
  49.     begin
  50.       Button[i,j] := TButton.Create(Self);
  51.       Button[i,j].Parent := Self;
  52.       Button[i,j].Left := 6 + (600 div X) * i;
  53.       Button[i,j].Width := (600 div X) - 8;
  54.       Button[i,j].Top := 6 + (400 div Y) * j;
  55.       Button[i,j].Height := (400 div Y) - 8;
  56.       Button[i,j].Tag := 1 + (j * X + i) div 2;
  57.       Button[i,j].Caption := '?';
  58.       Button[i,j].OnClick := FirstButtonClick
  59.     end
  60.   end;
  61.   Shuffle(Button)
  62. end;
  63.  
  64. procedure TForm1.Shuffle(Button: TArrayArrayButton);
  65. var
  66.   i: Integer;
  67.   X,Y: Integer;
  68.   X1,X2,Y1,Y2: Integer;
  69. begin
  70.   X := Length(Button);
  71.   Y := Length(Button[0]);
  72.   for i:=1 to 1001 do
  73.   begin
  74.     X1 := Random(X);
  75.     X2 := Random(X);
  76.     Y1 := Random(Y);
  77.     Y2 := Random(Y);
  78.     Tag := Button[X1,Y1].Tag;
  79.     Button[X1,Y1].Tag := Button[X2,Y2].Tag;
  80.     Button[X2,Y2].Tag := Tag
  81.   end
  82. end;
  83.  
  84. procedure TForm1.FirstButtonClick(Sender: TObject);
  85. var
  86.   i: Integer;
  87. begin
  88.   Tag := (Sender AS TButton).Tag;
  89.   (Sender AS TButton).Caption := IntToStr(Tag);
  90.   for i:=0 to Pred(ComponentCount) do
  91.     if Components[i] IS TButton then
  92.       if (Components[i] AS TButton).Enabled then
  93.         (Components[i] AS TButton).OnClick := SecondButtonClick
  94.           { assign new event handler }
  95. end;
  96.  
  97. procedure TForm1.SecondButtonClick(Sender: TObject);
  98. var
  99.   i: Integer;
  100. begin
  101.   Inc(Turns);
  102.   Caption := Format(_Caption,[Turns]);
  103.   (Sender AS TButton).Caption := IntToStr((Sender AS TButton).Tag);
  104.   if (Sender AS TButton).Tag = Tag then { the same }
  105.   begin
  106.     (Sender AS TButton).Enabled := False;
  107.     for i:=0 to Pred(ComponentCount) do
  108.       if Components[i] IS TButton then
  109.         if (Components[i] AS TButton).Tag = Tag then
  110.           (Components[i] AS TButton).Enabled := False
  111.   end
  112.   else { not the same; hide again }
  113.   begin
  114.     Sleep(1000);
  115.     for i:=0 to Pred(ComponentCount) do
  116.       if Components[i] IS TButton then
  117.         if (Components[i] AS TButton).Enabled and
  118.           ((Components[i] AS TButton).Caption <> '?') then
  119.           (Components[i] AS TButton).Caption := '?'
  120.   end;
  121.   for i:=0 to Pred(ComponentCount) do
  122.     if Components[i] IS TButton then
  123.       if (Components[i] AS TButton).Enabled then
  124.         (Components[i] AS TButton).OnClick := FirstButtonClick
  125.           { assign new event handler }
  126. end;
  127.  
  128. end.
  129.